分类
联系方式
  1. 新浪微博
  2. E-mail

Dart eval:DeclarationOrBridge 实体类

介绍

表示一个声明,它是一个标准的 Dart 声明,或者是 dart_eval 桥接声明。可以看出,该类对 Dart 的声明进行了扩展,加入了桥接 Dart 的能力。也就是说,对于 Dart 中的声明,通过 BridgeDeclaration,可以导入到 dart_eval 中,在 dart_eval 使用时,最终会操作 Dart 中的声明。

类实现

实现源码如下:

class DeclarationOrBridge<T extends Declaration, R extends BridgeDeclaration> {
  DeclarationOrBridge(this.sourceLib, {this.declaration, this.bridge}) 
    : assert(declaration != null || bridge != null);

  int sourceLib;
  T? declaration; // Dart 声明
  R? bridge;      // 桥接声明,二选一

  bool get isBridge => bridge != null;
}

其中:sourceLib 是什么呢?许多地方直接传入了 -1。

使用场景

在《Dart eval:Compiler 类》的 compileSources 方法中,实现了将桥接类从 BridgeDeclaration 包装为 DeclarationOrBridge 的过程。具体代码如下:

for (final bridgeLibrary in _bridgeDeclarations.keys) {
  final bridgeLibDeclarations = [
    for (final bridgeDeclaration in _bridgeDeclarations[bridgeLibrary]!)
      DeclarationOrBridge(-1, bridge: bridgeDeclaration)
  ];

其中:sourceLib 直接传入了 -1。